package com.tedu.day02.oop;

/**
 * this关键字---super关键字---使用完全一致
 * this关键字不需要继承---当前类，指代当前
 * 使用方式: 调用当前类的属性、方法、构造器
 *          this.属性           【当前类的属性赋值】
 *                             出现在构造器或者方法当中
 *                             区别当前类的属性与参数“名称”一致
 *         this.方法
 *         this()             多个有参构造器
 *
 *
 *   笔试题: this和super关键字区别?
 *          this  调用本类的属性、方法、构造器
 *          super 调用父类的属性、方法、构造器，存在继承关系，使用super
 *          this()与 super()  传递参数: 赋值
 *          this()  调用本类的其他构造器---构造器首行
 *          super() 调用父类的其他构造器---子类构造器首行
 *          请问this()和super()可以同时出现在对象构造器当中吗?  ×
 *                        this()和super()不可以!!!同时出现在对象构造器当中
 */
public class This关键字 {
    int i;  //属性---很少赋值【声明未赋值】---构造器或者方法中进行赋值
    int j;  //属性---很少赋值【声明未赋值】---构造器或者方法中进行赋值

    public This关键字(int i, int j) {
        this.i = i;
        this.j = j;
    }
    //构造器: 有参   需求:创建一个参数对象，给i跟j赋值  【跟一样super】
    public This关键字(int i) {
        this(3,4);  //调用本类其他有参构造器====传参  i=3
        this.i = i;   //常见:   this.属性【当前类下属性】= 参数  i=1
                      //赋值  this.i=1;
    }
    //方法--this.方法
    public void testI(){
        System.out.println("我是I");
    }
    public void testJ(){  //调取---输出:  我是I   我是J
        this.testI();
        System.out.println("我是J");
    }
    public static void main(String[] args){
        System.out.println(new This关键字(1).j);  //属性没有输出语句
        //new This关键字(1).testJ();                //方法有输出语句
    }
}
